#ifndef creole_regex_base_header
#define creole_regex_base_header

class match_result;
#include <string>

class alt;
class seq;
class mt0;

class regex_base
{
     public:
     virtual ~regex_base() {}
     virtual regex_base* copy() const = 0;

     virtual match_result match(const std::string&) const=0;

     alt operator|(const regex_base&) const;
     seq operator>>(const regex_base&) const;
     mt0 operator*() const;
     seq operator+() const;
};

#include "alt.h"
#include "mt0.h"
#include "seq.h"

#endif
